
#ifndef COMMON_H_H
#define COMMON_H_H

#include <stdint.h>
#include <string.h>
#include <stdio.h>
#include "dataproc.h"
#include "pulse.h"
#include "str_ext.h"
// #define U8_GEN
#define UCHAR_GEN
#define BYTE_GEN
// #define UINT_GEN
#include "mytype.h"
#include "symbol_def.h"

#ifdef __cplusplus
extern "C"
{
#endif

/*****************************************************************************
 * @brief   global dbg
 *****************************************************************************/
#ifndef DBG_EN
#define DBG_EN 1
#endif

#ifndef PRINTF_EN
#define PRINTF_EN 1
#endif

/*****************************************************************************
 * @brief   shell fun
 *****************************************************************************/
#ifndef SHELL_EN
#define SHELL_EN 1
#endif
#define SHELL_CMD_BUFF_SIZE 256
#define SHELL_ARGV_MAX 12

/*****************************************************************************
 * @brief   moudle dbg
 *****************************************************************************/

/*****************************************************************************
 * @brief dgb port
 *****************************************************************************/
#define dbg_port_obj com.obj06
#if DBG_EN + PRINTF_EN + SHELL_EN > 0
#define dbg_port_init com06_Init
#define DBG_PORT_ACT 1
#else
#define dbg_port_init(...)
#define DBG_PORT_ACT 0
#endif

/*****************************************************************************
 * @brief print
 *****************************************************************************/
#define hal_print_fun
	void sys_hw_printf(const char *fmt, ...);
	void sys_hw_puts(const char *str);

/*****************************************************************************
 * @brief   shell print
 *****************************************************************************/
#define sh_print sys_hw_printf
#define sh_puts sys_hw_puts
	int shell_fun_list_exe(const char *cmd);

/*****************************************************************************
 * @brief   dbg print
 *****************************************************************************/
#if DBG_EN > 0
#define dbg_print sys_hw_printf
#define dbg_puts sys_hw_puts
#define dbg_notice gui_notice
#define dbg_u8_print mem_u8_disp
#define dbg_u16_print mem_u16_disp
#define dbg_u32_print mem_u32_disp
#else
#define dbg_print(...)
#define dbg_puts(...)
#define dbg_notice(...)
#define dbg_u8_print(...)
#define dbg_u16_print(...)
#define dbg_u32_print(...)
#endif

#define dbg_put_line() dbg_puts(CR SYMBOL_LINE_EQ CR);

	/***************************************************************************
	 * @brief  8位格式显示内存信息
	 * \param[in] head :添加信息头
	 * \param[in] dat  :数据地址
	 * \param[in] head :长度
	 * \param[in] line :每行最大显示数量
	 * \retval: none
	 ***************************************************************************/
	void mem_u8_disp(const void *head, const void *dat, int len, int line);

	/***************************************************************************
	 * @brief  16位格式显示内存信息
	 * \param[in] head :添加信息头
	 * \param[in] dat  :数据地址
	 * \param[in] head :长度
	 * \param[in] line :每行最大显示数量
	 * \retval: none
	 ***************************************************************************/
	void mem_u16_disp(const void *head, const void *dat, int len, int line);

	/***************************************************************************
	 * @brief  32位格式显示内存信息
	 * \param[in] head :添加信息头
	 * \param[in] dat  :数据地址
	 * \param[in] head :长度
	 * \param[in] line :每行最大显示数量
	 * \retval: none
	 ***************************************************************************/
	void mem_u32_disp(const void *head, const void *dat, int len, int line);

#define DBG_FILE file_name_get(__FILE__)
#define DBG_LINE __LINE__

#include "dbg_assert.h"
#include "sh_func.h"

#ifdef __cplusplus
}
#endif

#endif /* COMMON_H_H */
